#include<iostream>
#include<unistd.h>
#include<signal.h>
#include<sstream>
#include<cstring>
using namespace std;
//手册
void Usage(string proc)
{
    cout<<"\tUsage: \n\t";
    cout<<proc<<"信号编号，目标进程\n"<<endl;
}


void hander(int signalnum)
{
    cout<<"signal:"<<signalnum<<"pid:"<<getpid()<<endl;
    int n=alarm(10);
    cout<<"剩余时间"<<n<<endl;
}

//./mysignal 9 进程号
int main(int argc,char *argv[])
{
    cout<<"pid:"<<getpid()<<endl;
    signal(SIGALRM,hander);
    alarm(5);
    while(true)
    {
        sleep(1);
    }






    // signal(SIGABRT,hander);
    // while(true)
    // {
    //     cout<<"first"<<endl;
    //     sleep(1);
    //     abort();//给自己发信号
    //     cout<<"end"<<endl;
    // }


    // signal(SIGINT,hander);
    // while(true)
    // {
    //     sleep(2);
    //     raise(2);
    // }


















    // 模拟发送信号
    // if(argc!=3)
    // {
    //     Usage(argv[0]);
    //     exit(1);
    // }

    // int signalnum=atoi(argv[1]);
    // int target_id=atoi(argv[2]);

    // ///////////////////////////////
    // //待测试代码
    // // stringstream ss;
    // // ss<< argv[1];
    // // ss>>signalnum;
    // // ss<<argv[2];
    // // ss>>target_id;
    // ///////////////////////////////

    // int n = kill(target_id,signalnum);  
    // if(n!=0)
    // {
    //     cerr<<errno<<" : "<<strerror(errno)<<endl;
    //     exit(2);
    // }




    return 0;
}



// void hander(int signalnum)
// {

//     cout<<"signal:"<<signalnum<<endl;


// }
// int main()
// {
//     //2号信号，进程默认处理为进程终止   ctrl +c 
//     //signal 可以自定义对指定信号进行自定义处理动作
//     //hander方法在产生2号信号时就调用了
//     // signal(3,hander); 
//     // signal(2,hander); 



//     for(int i=1;i<=31;i++)
//     {
//         signal(i,hander);
//     }
//     while(true )
//     {
//         cout<<"hello,liunxpid:"<<getpid()<<endl;
//         sleep(5);
//     }
//     return 0;
// }